package GUI;

import com.sun.media.jai.widget.DisplayJAI;
import deteccao.ControleMouse;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.InputEvent;
import java.util.ArrayList;





public class ImagePanel extends DisplayJAI 
      {

        private ArrayList<Point> pontoCursor= new ArrayList<Point>();
        private ArrayList<Point> blobs = new ArrayList<Point>();
        private Point cabeca;
        private Point limite;
        private ControleMouse mouse;
        private int count = 0;
        public Image myimg = null;
        String estado="";
        private boolean changeDireita = false;


        public ImagePanel()
        {
          setLayout(null);
          setSize(400,400);
        }


    @Override
        public void paint(Graphics g)
        {
           super.paint(g);
           if (!changeDireita) {
               if (!pontoCursor.isEmpty()) {
                    g.setColor(Color.GREEN);
                    g.drawRect(pontoCursor.get(0).x,pontoCursor.get(2).y,pontoCursor.get(1).x-pontoCursor.get(0).x, pontoCursor.get(3).y-pontoCursor.get(2).y);
                }

              g.setColor(Color.RED);
               if (limite!=null) {
                   g.drawRect(limite.x-25, limite.y, 50, 50);
               }
           } else {
                if (!blobs.isEmpty()) {
                    g.setColor(Color.GREEN);
                    g.drawRect(blobs.get(0).x,blobs.get(2).y,blobs.get(1).x-blobs.get(0).x, blobs.get(3).y-blobs.get(2).y);
                }

              g.setColor(Color.RED);
               if (limite!=null) {
                   g.drawRect(limite.x-25, limite.y, 50, 50);
               }
           }
           
        }

    public ArrayList<Point> getPontoCursor() {
        return pontoCursor;
    }

    public void addPonto(Point ponto) {
        this.pontoCursor.add(ponto);
    }

    public void setPontoCursor(ArrayList<Point> pontoCursor) {
        this.pontoCursor = pontoCursor;
    }

    public ArrayList<Point> getBlobs() {
        return blobs;
    }

    public void setBlobs(ArrayList<Point> blobs) {
        this.blobs = blobs;
    }

    public Point getCabeca() {
        return cabeca;
    }

    public void setCabeca(Point cabeca) {
        this.cabeca = cabeca;
    }

    public void detectaClique(String evento) {
        System.out.println(evento);
        if ((evento.equals("fechada") && !estado.equals("fechada")) ||  (evento.equals("fechadainvertida") && !estado.equals("fechada"))) {
            mouse.mousePress(InputEvent.BUTTON1_MASK); //drag
            estado = "fechada";
        } else if (evento.equals("aberta") ||  evento.equals("abertainvertida")) {
            mouse.mouseRelease(InputEvent.BUTTON1_MASK); //release
            estado = "aberta";
        } else if (evento.equals("latino") || evento.equals("latinoinvertido")) {
            if (!changeDireita)
                changeDireita = true;
            else
                changeDireita = false;
            estado = "latino";
        }
    }

    public ControleMouse getMouse() {
        return mouse;
    }

    public void setMouse(ControleMouse mouse) {
        this.mouse = mouse;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public Point getLimite() {
        return limite;
    }

    public void setLimite(Point limite) {
        this.limite = limite;
    }

    public boolean isChangeDireita() {
        return changeDireita;
    }

    public void setChangeDireita(boolean changeDireita) {
        this.changeDireita = changeDireita;
    }


}


